package condominio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import condominio.excepcion.DAOExcepcion;
import condominio.modelo.Cuota;
import condominio.modelo.Mora;
import condominio.modelo.Persona;
import condominio.modelo.Residente;
import condominio.modelo.Tipo_Pago;
import condominio.modelo.Vivienda;
import condominio.util.ConexionBD;

public class MorosoDAO extends BaseDAO {
	public Collection<Cuota> listarMora(String pfechaVen) throws DAOExcepcion {
		System.out.println("MorosoDAO: listarMora(int pIdPersona)");
		String query  = "SELECT  a.idPersona, a.Dni, a.Nombres, a.ApePat, a.ApeMat, ";
               query += "b.IdVivienda, b.direccion, ";
               query += "c.IdCuota, c.idTipoPago, c.NroCuotas, c.Anio, c.Mes, c.FechaVen, c.FecPago, c.Status, c.Monto ";
               query += "FROM  Persona AS a ";
               query += "INNER JOIN  Vivienda AS b ";
               query += "ON a.IdPersona = b.IdPersona ";
               query += "INNER JOIN Cuota AS c ";
               query += "ON  b.IdVivienda = c.IdVivienda ";
               query += "WHERE c.status = '' and c.fechaVen < ?" ;
         
               
		Collection<Cuota> lista = new ArrayList<Cuota>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, pfechaVen);
			rs = stmt.executeQuery();
			
			while (rs.next()) {
				Persona p = new Persona();
				p.setIdPersona(rs.getInt("idPersona"));
				p.setDni(rs.getString("Dni"));
				p.setNombres(rs.getString("Nombres"));
				p.setApePat(rs.getString("ApePat"));
				p.setApeMat(rs.getString("ApeMat"));
				
				Residente r = new Residente();
				r.setIdPersona(p.getIdPersona());
				r.setDni(p.getDni());
				r.setNombres(p.getNombres());
				r.setApePat(p.getApePat());
				r.setApeMat(p.getApeMat());
				
				Vivienda v = new Vivienda();
				v.setIdVivienda(rs.getInt("idVivienda"));
				v.setDireccion(rs.getString("direccion"));
				v.setResidente(r);
	
				Cuota c = new Cuota();				
				c.setIdCuota(rs.getInt("IdCuota"));
				c.setVivienda(v);
				
				Tipo_Pago tp = new Tipo_Pago();
				tp.setIdTipoPago(rs.getInt("idTipoPago"));
				
				c.setIdTipoPago(tp);				
				
				c.setNroCuotas(rs.getInt("NroCuotas"));
				c.setAnio(rs.getString("Anio"));
				c.setMes(rs.getString("Mes"));
				c.setFechaVen(rs.getString("FechaVen"));
				c.setFechaPag(rs.getString("FecPago"));
				
				lista.add(c);
							}
		} catch (SQLException e) {
			System.out.println("Error en conexion");
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
}
